package aa.jx.cartFunction.service;

import aa.jx.cartFunction.mapper.CartMapper;
import aa.jx.cartFunction.model.Cart;
import aa.jx.cartFunction.model.CartItemDTO;
import aa.jx.cartFunction.model.CartProductDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class CartServiceImpl implements CartService{
    private final CartMapper cartMapper;

    @Autowired
    public CartServiceImpl(CartMapper cartMapper){
        this.cartMapper=cartMapper;
    }

    @Override
    @Transactional
    public Cart addCart(Cart cart) {

        // 检查是否已存在相同商品
        Integer existingId = cartMapper.existsCartItem(cart.getUserId(), cart.getProductId());
        if (existingId != null) {
            // 存在则更新数量并返回更新后的对象
            cartMapper.updateCartQuantity(existingId, cart.getQuantity());
            return cartMapper.getCartById(existingId);
        } else {
            // 不存在则新增并返回带ID的对象
            cartMapper.addCart(cart); // 这里会设置id到cart对象
            return cart;
        }
    }

    // CartServiceImpl.java
    @Override
    public boolean existsCartItem(Integer userId, Integer productId) {
        return cartMapper.existsCartItem(userId, productId) != null;
    }

    @Override
    public Cart updateCartQuantity(Integer cartId, Integer quantity) {

        cartMapper.updateCartQuantity(cartId, quantity);
        return cartMapper.getCartById(cartId);
    }

    // CartServiceImpl.java


    @Override
    @Transactional
    public boolean deleteCartItem(Integer id, Integer userId) {
        // 验证用户是否有权删除此购物车项
        Cart cartItem = cartMapper.getCartById(id);
        if (cartItem == null || !cartItem.getUserId().equals(userId)) {
            return false;
        }

        // 执行删除
        int result = cartMapper.deleteCartItem(id, userId);
        return result > 0;
    }

    @Override
    @Transactional
    public boolean clearCart(Integer userId) {
        if (userId == null) {
            return false;
        }

        int result = cartMapper.clearCartByUserId(userId);
        return result >= 0; // 即使购物车为空也返回true
    }

    @Override
    public List<CartItemDTO> getCartItems(Integer userId, String productName) {
        return cartMapper.selectCartItemsByUserIdAndProductName(userId, productName);
    }


    // 在原有方法后添加
    @Override
    public List<CartProductDTO> getCartProducts(Integer userId) {
        return cartMapper.selectCartProductsByUserId(userId);
    }


    @Override
    @Transactional
    public Cart updateCartQuantity(Integer cartId, Integer userId, Integer quantity) {
        // 验证用户是否有权修改此购物车项
        Cart cartItem = cartMapper.getCartById(cartId);
        if (cartItem == null || !cartItem.getUserId().equals(userId)) {
            throw new RuntimeException("购物车项不存在或无权修改");
        }

        cartMapper.updateCartQuantityOne(cartId, userId, quantity);
        return cartMapper.getCartById(cartId);
    }

    // CartServiceImpl.java
    @Override
    public Cart getCartById(Integer cartId) {
        return cartMapper.getCartById(cartId);
    }


//新增

    @Override
    public List<CartProductDTO> getCartItemsByIds(List<Integer> ids) {
        return cartMapper.selectCartItemsByIds(ids);
    }



}
